//建立数据库连接

/*
 1.安装sequelize 并请求赋给Sequelize :类似于webform的sqlherper（像koa框架一样）;
 
 2.安装驱动(pg  pg-hstore) 给sequelize使用的工具 
  
 3.打通数据库： new一个 前面Sequelize的实例sequelize，相当于sa  类比app的创建 包含数据库名称密码等.

 4.创建表模型:  利用sequelize的define方法定义字段并交给User保管

 5.User(sequelize)把表模型更新进postgresql： User.sync({ force: true })

 6.CRUD
*/

const fs = require('fs');
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('demoone', 'postgres', '123', {
    host: 'zyfyyds.top',
    dialect: 'postgres'
});
//获取所有.js的文件
let files = fs.readdirSync(__dirname);

//过滤掉index.js文件
let modelfiles = files.filter(item => {
    return item.endsWith('.js') && item != 'index.js'
})

//定义一个装所有模型的对象，不定义成数组是为了以后暴露出去能快速定位
let models = {};
modelfiles.forEach(item => {
    let model = require(__dirname + '/' + item)
    modelname = item.replace('.js', '');
    console.log(modelname);
    models[modelname] = sequelize.define(modelname, model);

    //内部检测使用let定义之后的模型是否匹配正确
    console.log(models[modelname] === sequelize.models.users); //true
});
//检测是否外部可以获取
console.log(models); //{ users: users }
//外部检测获取的是否是有用的模型对象
console.log(models[modelname] === sequelize.models.users); //true且models[modelname]是一个function


/*第一种 模型同步 与 初始化模型字段
for (let m in models) {
    if (models[m] == sequelize.models.users) {
        models[m].sync({ force: true }).then(() => {
            models[m].bulkCreate([{
                username: 'admin',
                password: 123
            }]);
        });
    } else {
        models[m].sync({ force: true }).then(() => {
            models[m].bulkCreate([{
                name: 'Soul',
                price: '188',
                stock: '10'
            }]);
        });
    }
}
*/


//第二种 先同步模型暴露后再初始化模型字段
async function sequelize_sync() {
    await sequelize.sync({ force: true });
}

module.exports = {
    sequelize_sync,
    models
};